    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package blogic;

import bentity.*;
import blogic.*;
import dao.*;
import java.awt.*;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author giulio
 */
public class blAlmacen {

//    public beAlmacen fllenaPallets(){
//        beAlmacen  beAlm =new beAlmacen();
//        return
//    }
    private daoAlmacen daAlm= new daoAlmacen();
    private daoRack daRack= new daoRack();


    public int registraAlmacen(beAlmacen alm, int p, int uxr ) throws SQLException, Exception{
      

        int res=daAlm.fRegistrarAlmacen(alm);

        Connection conn=null;

        if (daoHelper.TRANSACCION_EXITOSA==res){
            for (int fil = 1;fil<=alm.getFilas(); fil++) {
                for (int col = 1;col<=alm.getRacksXFila(); col++){
                    int id=daRack.fRegistrarRack(alm.getAncho(), alm.getLargo(),fil, col, p,uxr);
                    conn = daoHelper.dameConexion();
                    for (int ubi= 1; ubi <= uxr; ubi++){//se modificará a un número de ubicaciones configurable
                        for (int piso = 1; piso <= p; piso++) {//se modificará a un número de pisos configurable
                            int x=ubi+1+((col-1)*(uxr+1));
                            //rack*8-7+ubi    ubi+7*rack-6
                            int y=0;

                            if ((fil % 2) == 1)
                                y = ((fil+1)/2)*3-1;
                            if ((fil % 2) == 0)
                                y = (fil/2)*3;
                            daRack.fRegistrarUbicacion(conn,piso,ubi,x, y, id);
                        }
                        
                    }
                    
                    
                }


            }

        }

        conn.close();

        return res;
    }

    public void modificarTipoDePallet(int pallet) throws SQLException{
        daAlm.fModificartTipoPallet(pallet);
    }

    public int modificarAlmacen(beAlmacen alm, int p, int uxr,boolean aumenta) throws SQLException, Exception{

        int res=daAlm.fModificarAlmacen(alm);
        int pisomax =daAlm.pisoMax();

        Connection conn=null;

        if (aumenta){
            //daAlm.reconstruir();
            Point maxs = new Point();
            for (int fil = 1;fil<=alm.getFilas(); fil++) {
                for (int col = 1;col<=alm.getRacksXFila(); col++){
                    int ra=daAlm.obtenerRack(fil, col);
                    if(ra==0) {
                        ra=daRack.fRegistrarRack(alm.getAncho(), alm.getLargo(),fil, col,p, uxr);
                    }
                    else{
                        daAlm.fUpdPisoUbsRack(p, uxr, ra);
                    }
                    conn = daoHelper.dameConexion();
                    for (int ubi= 1; ubi <= uxr; ubi++){
                        for (int piso = 1; piso <= p; piso++) {
                            int ub=daAlm.obtenerUbicacion(ra, piso,uxr);
                            if(ub==0){
                                int x=ubi+1+((col-1)*(uxr+1));
                                //rack*8-7+ubi    ubi+7*rack-6
                                int y=0;
                                if ((fil % 2) == 1)
                                    y = ((fil+1)/2)*3-1;
                                if ((fil % 2) == 0)
                                    y = (fil/2)*3;
                                daRack.fRegistrarUbicacion(conn,piso,ubi,x, y, ra);
                            }
                        }
                    }
                }                
            }
            conn.close();
        }


        

        return res;
    }

    public int registraEntrada(beEntrada entry) throws SQLException{
        daoAlmacen daAlm= new daoAlmacen();
        return daAlm.fRegistrarEntrada(entry);
    }

    public void registraTipoProducto(beTipoProducto tip, ArrayList<Point> racks) throws SQLException, Exception{
        daoAlmacen daAlm= new daoAlmacen();
        int idtp =daAlm.fRegistrarTipoProducto(tip);
        for (int i = 0; i < racks.size(); i++) {
            int idr=daRack.getIdRack(racks.get(i).y, racks.get(i).x);
            daRack.actualizarTipoProdRack(idr, idtp);

        }
    }

    public String[] buscarEntrada() throws SQLException{
        daoAlmacen daAlm= new daoAlmacen();
        return daAlm.buscarEntradas();
    }

    public ArrayList<beEntrada> buscarObjsEntrada() throws SQLException{
        daoAlmacen daAlm= new daoAlmacen();
        return daAlm.buscarObjsEntradas();
    }

    public ArrayList<String> buscarTiposProduct() throws SQLException{
        daoAlmacen daAlm= new daoAlmacen();
        return daAlm.buscarTiposProductos();
    }

    public beAlmacen fObtenerAlmacen() throws SQLException{
        if (daAlm.hayAlmacen()==0){
            return null;
        }
        else{
            return daAlm.obtenerAlmacen();
        }
        
    }

    public void borrarEntradsSecciones() throws SQLException {
        daAlm.borrarEntradas();
        daAlm.borrarSecciones();
    }

    public int registrarTipoProducto(beTipoProducto tip) throws Exception {
        daoAlmacen daAlm= new daoAlmacen();
        return daAlm.fRegistrarTipoProducto(tip);
    }


}
